package 数列.连续正整数求和;

/**
 * TODO
 *
 * @className: lxzzsqh
 * @description: TODO
 * @author: 等什么柠檬君
 * @date: 2022-04-28 00:07
 **/
public class lxzzsqh {
    public static void main(String[] args) {
        System.out.println(consecutiveNumbersSum(246854111));

    }

//    /**
//     * 可行 但超时
//     * @param n
//     * @return
//     */
//    public static int consecutiveNumbersSum(int n) {
//        if(n == 1){
//            return 1;
//        }
//        int left = 1;
//        int right = 2;
//        int count = 0;
//        while(left <= right){
//            int sum = (left + right) * (right - left + 1) >> 1;
//            if(sum < n){
//                ++right;
//            }
//            if(sum > n){
//                ++left;
//            }
//            if(sum == n){
//                ++count;
//                ++left;
//            }
//        }
//        return count;
//    }


    /**
     * 脑筋急TM转弯
     * @param n
     * @return
     */
    public static int consecutiveNumbersSum(int n) {
        int count = 1;
        int sum = 1;
        for (int i = 2; (sum+=i) <= n; ++i) {
            if ((n-sum)%i == 0){
                ++count;
            }

        }
        return count;
    }
}
